/********************************************
 * 功能说明: 
 * 模块名称: 
 * 系统名称: 
 * 软件版权: 北京银杉金服科技有限公司
 * 系统版本: 1.0.0
 * 开发人员: zhangfb
 * 开发时间: 2019/1/12 22:45
 * 审核人员: 
 * 相关文档: 
 * 修改记录: 修改日期 修改人员 修改说明
 *********************************************/
package com.hyacinth.aurora.constant;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @author zhangfb
 * @version 1.0.0.1
 * @since JDK 1.8
 */
public enum StatusEnum {

    /** success */
    SUCCESS("9000", "success"),

    /** request Error */
    REQUEST_ERROR("7000", "Request Error，uri=%s"),

    /** duplicate ioc impl*/
    DUPLICATE_IOC("8000", "Duplicate ioc impl error"),

    /** empty of package */
    NULL_PACKAGE("8000", "Your main class is empty of package, class name = %s"),

    /** bind port fail */
    BIND_PORT_FAIL("5000", "同步绑定端口[%s]失败!"),

    /** IllegalArgumentException */
    ILLEGAL_PARAMETER("404", "IllegalArgumentException: You can only have two parameters at most by using @CicadaRoute!"),

    /** 404 */
    NOT_FOUND("404", "Need to declare a method by using @AuroraRoute!"),

    /** 服务端口配置错误 */
    PORT_CONF_ERROR("505", "服务端口配置错误，port=%s"),
    ;

    /** 枚举值码 */
    private final String code;

    /** 枚举描述 */
    private final String message;

    /**
     * 构建一个 StatusEnum 。
     * @param code 枚举值码。
     * @param message 枚举描述。
     */
    private StatusEnum(String code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 得到枚举值码。
     * @return 枚举值码。
     */
    public String code() {
        return code;
    }

    /**
     * 得到枚举描述。
     * @return 枚举描述。
     */
    public String message() {
        return message;
    }

    /**
     * 通过枚举值码查找枚举值。
     * @param code 查找枚举值的枚举值码。
     * @return 枚举值码对应的枚举值。
     * @throws IllegalArgumentException 如果 code 没有对应的 StatusEnum 。
     */
    public static StatusEnum findStatus(String code) {
        for (StatusEnum status : values()) {
            if (status.code().equals(code)) {
                return status;
            }
        }
        throw new IllegalArgumentException("ResultInfo StatusEnum not legal:" + code);
    }

    /**
     * 获取全部枚举值。
     * @return 全部枚举值。
     */
    public static List<StatusEnum> getAllStatus() {
        List<StatusEnum> list = new ArrayList<>();
        Collections.addAll(list, values());
        return list;
    }

    /**
     * 获取全部枚举值码。
     * @return 全部枚举值码。
     */
    public static List<String> getAllStatusCode() {
        List<String> list = new ArrayList<>();
        for (StatusEnum status : values()) {
            list.add(status.code());
        }
        return list;
    }
}
